const computedBehavior = require('miniprogram-computed').behavior
const app = getApp();
const key = app.globalData.key;
const env = app.globalData.env;
const service = app.globalData.service;
const maxDistance = app.globalData.maxDistance;
const contextPath = app.globalData.contextPath;

Page({
    behaviors: [computedBehavior],
    /**
     * 页面的初始数据
     */
    data: {
        latitude: 0,
        longitude: 0,

        storeList: [],
        mapContext: null,
        storeDetailShow: false,
        currentStore: null,
        collapse: false,
        tabs: [],
        activeTab: 0,
        count: 5,
        windowWidth: 0,
        currentTab: 0,
        left: 0,
        list: [{
                "name": "找景区",
                "value": "scene"
            },
            {
                "name": "找美食",
                "value": "food"
            },
            {
                "name": "找酒店",
                "value": "hotel"
            },
            {
                "name": "找卫生间",
                "value": "bathroom"
            }, {
                "name": "找停车场",
                "value": "parking"
            }, {
                "name": "找加油站",
                "value": "station"
            }, {
                "name": "找公交站",
                "value": "stop"
            }, {
                "name": "找商场",
                "value": "store"
            }, {
                "name": "找医院",
                "value": "hospital"
            },
        ]


    },

    computed: {
        markers(data) {
            return data.storeList.map((item, index) => {
                return {
                    id: index + 1,
                    key: item.cid,
                    title: item.cname,
                    latitude: item.latitude,
                    longitude: item.longitude,
                    width: '55rpx',
                    height: '69rpx'
                }
            })
        }
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad: async function (options) {

        await this.loadCurrentLocation()

        this.initMapContext()
        var that = this;
        wx.getSystemInfo({
            success: function (res) {
                that.setData({
                    windowWidth: res.windowWidth
                });
            }
        });
    },

    fetchStoreList: async function () {
        // 将函数声明为异步
        // 设置请求参数
        const tab = this.data.list[this.data.currentTab]["value"];
        console.log(tab);
        const latitude = this.data.latitude; // 起点坐标
        const longitude = this.data.longitude;

        // 定义一个函数来转换数据格式
        const transformData = (data) => {
            return data.map(item => ({
                address: item.address,
                cid: 0, // 假设所有地点的cid为0
                cname: item.title,
                consphone: item.tel || "",
                description: "",
                distance: (item._distance / 1000).toFixed(2), // 将距离转换为公里并保留两位小数
                image_path: "", // 没有图片路径信息
                latitude: item.location.lat,
                longitude: item.location.lng,
                opening_time: "",
                ticket_price: ""
            }));
        };

        const keywords = {
            bathroom: '卫生间',
            parking: '停车场',
            stop: '公交站',
            station: '加油站',
            hospital: '医院'
        };

        if (keywords[tab]) {
            const keyword = encodeURIComponent(keywords[tab]); // 对 keyword 进行 URL 编码
            const boundary = `nearby(${latitude},${longitude},1000)`; // 预先计算 boundary 参数

            wx.request({
                url: `https://apis.map.qq.com/ws/place/v1/search?keyword=${keyword}&boundary=${boundary}&key=${key}`,
                success: res => {
                    console.log(res);
                    const storeList = transformData(res.data.data);
                    this.setData({
                        storeList: storeList
                    });
                },
                fail: error => {
                    console.error('请求失败: ', error); // 错误处理
                    this.setData({
                        storeList: []
                    });
                }
            });
        } else {
            // 构造请求 URL
            const url = `${contextPath}/${tab}?longitude=${longitude}&latitude=${latitude}&distance=${maxDistance}`;

            try {
                const res = await wx.cloud.callContainer({
                    config: {
                        env: env, // 微信云托管的环境 ID，根据实际情况填写
                    },
                    path: url, // 业务自定义路径和参数
                    method: 'GET', // 请求方法
                    header: {
                        'X-WX-SERVICE': service, // 你的云托管服务名称
                        // 可以添加其他需要的 header
                    },
                    // 可以添加请求的 body，GET 请求通常不需要
                });

                // console.log('获取到的数据结果: ', res); // 处理获取到的数据

                // 在 storeList 中的每个条目中，将 distance 字段转化为 km 单位并保留两位小数
                const processedData = res.data.map(item => {
                    item.distance = (item.distance / 1000).toFixed(2);
                    return item;
                });

                this.setData({
                    storeList: processedData
                });
            } catch (error) {
                console.error('请求失败: ', error); // 错误处理
                this.setData({
                    storeList: []
                });
            }
        }
    },
    navigateLocation(e) {
        const {
            latitude
        } = e.currentTarget.dataset
        const {
            longitude
        } = e.currentTarget.dataset
        wx.openLocation({
            latitude: Number(latitude),
            longitude: Number(longitude)
        })
    },

    initMapContext() {
        wx.createSelectorQuery().select('#store-map').context((res) => {
            this.mapContext = res.context
        }).exec()
    },
    switchTab: function (e) {
        this.setData({
            currentTab: e.detail.current
        });
        this.setLeft();
    },
    swichNav: function (e) {
        var current = e.target.dataset.current;
        if (this.data.currentTab != current) {
            this.setData({
                currentTab: current
            });
            this.fetchStoreList();
        }
        this.setLeft();


    },
    setLeft: function () {
        var data = this.data;
        var count = data.count;
        var windowWidth = data.windowWidth;
        var currentTab = data.currentTab;
        var per = windowWidth / count;
        var left = (currentTab - 2) * per;
        if (left < 0) {
            left = 0;
        }
        this.setData({
            left: left
        });
    },

    popupStoreDetail(e) {
        const {
            store
        } = e.currentTarget.dataset
        this.setData({
            storeDetailShow: true,
            currentStore: store
        })

    },
    collapse() {
        this.setData({
            collapse: !this.data.collapse
        })
    },

    async loadCurrentLocation() {
        wx.getLocation({
            type: 'wgs84',
            success: (res) => {
                const latitude = res.latitude
                const longitude = res.longitude
                this.setData({
                    latitude,
                    longitude
                }, async () => {
                    // 数据已经更新，现在可以安全地使用 latitude 和 longitude 了
                    this.fetchStoreList();
                })
            },
            fail(res) {
                console.log(res)
            }
        })
    },

    goToCurrentLocation() {
        this.mapContext.moveToLocation()

        this.loadCurrentLocation();
    },

    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady() {

    },

    /**
     * 生命周期函数--监听页面显示
     */
    onShow() {

    },

    /**
     * 生命周期函数--监听页面隐藏
     */
    onHide() {

    },

    /**
     * 生命周期函数--监听页面卸载
     */
    onUnload() {

    },

    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh() {

    },

    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom() {

    },

    /**
     * 用户点击右上角分享
     */
    onShareAppMessage() {

    }
})